/*
 * Alarma.cpp
 *
 *  Created on: Mar 25, 2010
 *      Author: jgrande
 */

#include <string>
#include <signal.h>

#include "DirectorioRPC.h"

#include "../../Middleware/Common/Config.h"

#include "../../Framework/IO/log.h"
#include "../../Framework/Common/utiles.h"

using std::string;
using namespace framework::io;

static CLIENT* client = NULL;

void sigint_handler(int signal) {
	if(client!=NULL) {
		terminar_1(client);
		clnt_destroy(client);
	}
	exit(0);
}

void dormir() {
	unsigned int faltante = 10;

	while((faltante=sleep(faltante)));
}

int main(int argc, char* argv[]) {
	logger.set_pname("Directorio/Alarma");
	//Se define el nivel de logueo deseado
	LogConfiguracionSingleton::instance().nivelLogueo = LogType::LOG_DEBUG_1;

	bool_t* result;
	JuegoRPC* pJuego;
	string hostname = ConfigSingleton::instance().get<string>("hostDirectorio");

	Utiles::registrar_signal(SIGINT, sigint_handler);

	client = clnt_create (hostname.c_str(),
					DIRECTORIO_RPC_PROG, DIRECTORIO_RPC_VERS, "udp");
	if(client==NULL) {
		logger << LogType::LOG_ERROR <<"imposible inicializar cliente RPC" << logger.endl;
		return 1;
	}

	logger << "cliente RPC inicializado!" << logger.endl;

	inicializar_1(client);

	forever {
		logger << LogType::LOG_DEBUG_1 <<"durmiendo..." << logger.endl;
		dormir();
		logger << LogType::LOG_DEBUG_1 << "despierto!" << logger.endl;

		result = cerrar_universos_1(client);
		if(result==(bool_t*)NULL || *result==FALSE) {
			logger << LogType::LOG_ERROR <<"error cerrando universos" << logger.endl;
		}
		result = cerrar_juegos_1(client);
		if(result==(bool_t*)NULL || *result==FALSE) {
			logger << LogType::LOG_ERROR << "error cerrando juegos" << logger.endl;
		}
	}

	return 0;
}
